ArcEngineӱjoin 
By  yumao  2007-7-17 22:27:00   


ʵֵνͼеһFeatureLayerԱһļӡ

l   Ҫ

ҪITableӿڶ󣬷ֱõͼеԱҪӵļͨIMemoryRelationshipClassFactory.OpenITableӿڶĳؼֶνӣ

ʹIDisplayRelationshipClass.DisplayRelationshipClassʾ

ҪõIMemoryRelationshipClassFactoryӿڣIRelationshipClassӿںIDisplayRelationshipClassӿڡ

l   ˵

JoinǽǰĵͼΪsLayerNameͼ·ΪsFilePathļΪsFileNameļֶΪsFieldNameֶνӡ

l   

Private Function Join(ByVal sLayerName As String, ByVal sFilePath As String, _ByVal sFileName As String, ByVal sFieldName As String) As Boolean

    Dim pMxDocument                     As IMxDocument
    Dim pMap                            As IMap
    Dim pWorkspaceFactory               As IWorkspaceFactory
    Dim pWorkspace                      As IWorkspace
    Dim pFeatureWorkspace               As IFeatureWorkspace
    Dim pFeatureLayer                   As IFeatureLayer
    Dim pFeatureClass                   As IFeatureClass
    Dim pPrimaryTable                   As ITable
    Dim pForeignTable                   As ITable
    Dim pDisplayTable                   As IDisplayTable
    Dim pMemoryRelationshipCF           As IMemoryRelationshipClassFactory
    Dim pRelationshipClass              As IRelationshipClass
    Dim pDisplayRelationshipC           As IDisplayRelationshipClass
    Dim nNumber                         As Integer
    Dim sForeignFile                    As String

On Error GoTo ErrorHandler:

    Join = False

    sForeignFile = Dir(sFilePath & "\" & sFileName)

    If (sForeignFile = "") Then

        MsgBox "The ForeignFile is not exist."

        Exit Function

    End If

    Set pWorkspaceFactory = New ShapefileWorkspaceFactory

    Set pWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)

    Set pFeatureWorkspace = pWorkspace

    Set pForeignTable = pFeatureWorkspace.OpenTable(sFileName)

    Set pMxDocument = ThisDocument

    Set pMap = pMxDocument.FocusMap

    For nNumber = 0 To pMap.LayerCount - 1

        If pMap.Layer(nNumber).Name = sLayerName Then

            Set pFeatureLayer = pMap.Layer(nNumber)

            Exit For

        End If

    Next

    If pFeatureLayer Is Nothing Then

        MsgBox "No Layer's Name is " & sLayerName

        Exit Function

    End If

    Set pDisplayTable = pFeatureLayer

    Set pFeatureClass = pDisplayTable.DisplayTable

    Set pPrimaryTable = pFeatureClass

    Set pMemoryRelationshipCF = New MemoryRelationshipClassFactory

    Set pRelationshipClass = pMemoryRelationshipCF.Open("TabletoLayer", pPrimaryTable, sFieldName, _

                    pForeignTable, sFieldName, "forward", "backward", esriRelCardinalityOneToOne)

    Set pDisplayRelationshipC = pFeatureLayer

    pDisplayRelationshipC.DisplayRelationshipClass pRelationshipClass, esriLeftOuterJoin

    Join = True

    Exit Function

ErrorHandler:

    MsgBox Err.Description

End Function

Private Sub UIButtonControl1_Click()

    Dim pVBProject              As VBProject

On Error GoTo ErrorHandler:

    Set pVBProject = ThisDocument.VBProject

    Join "WorldCountries", pVBProject.FileName & "\..\..\..\.." & "\data", "Continents.dbf", "FID"

    Exit Sub

ErrorHandler:

    MsgBox Err.Description

End Sub
 
 
